WebClient এর মাধ্যমে Asynchronous এবং Non-blocking HTTP Calls

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) WebClient এর পরিচিতি |
52
52

WebClient হলো Spring WebFlux-এর একটি অংশ, যা Spring Framework 5.0-এ প্রবর্তিত হয়। এটি Spring Boot অ্যাপ্লিকেশনে asynchronous এবং non-blocking HTTP কল করার জন্য ব্যবহার করা হয়। WebClient RestTemplate-এর একটি আধুনিক বিকল্প এবং এটি রিয়্যাক্টিভ প্রোগ্রামিং এর ধারণা অনুসরণ করে।


WebClient এর বৈশিষ্ট্য

  1. Non-blocking এবং Asynchronous:
    • HTTP কল করার সময় থ্রেড ব্লক না করে অন্যান্য কাজ চালিয়ে যেতে পারে।
  2. Reactive Streams API:
    • এটি Mono এবং Flux ব্যবহার করে ডেটা প্রসেসিং করে।
  3. High Performance:
    • বিশেষ করে মাইক্রোসার্ভিস আর্কিটেকচারে উচ্চতর পারফরমেন্স সরবরাহ করে।
  4. Customizable:
    • সহজে হেডার, টাইমআউট, এবং অন্যান্য সেটিংস কনফিগার করা যায়।

WebClient সেটআপ এবং কনফিগারেশন

Dependency যোগ করা

আপনার pom.xml ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

WebClient Bean কনফিগার করা

WebClient-এর জন্য একটি Bean তৈরি করতে পারেন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

WebClient ব্যবহার: উদাহরণ

১. GET কল (Asynchronous)

import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class UserClient {

    private final WebClient webClient;

    public UserClient(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
    }

    public Mono<String> getUserDetails() {
        return webClient.get()
                .uri("/users/1")
                .retrieve()
                .bodyToMono(String.class);
    }
}

ব্যাখ্যা:

  • retrieve(): রেসপন্স রিসিভ করে।
  • bodyToMono(String.class): রেসপন্সকে Mono টাইপে রূপান্তর করে, যা একক ডেটা ধারণ করে।

ক্লায়েন্ট কল করার সময়:

userClient.getUserDetails().subscribe(System.out::println);

২. POST কল (Asynchronous)

import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class UserClient {

    private final WebClient webClient;

    public UserClient(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
    }

    public Mono<String> createUser(String name, String email) {
        return webClient.post()
                .uri("/users")
                .bodyValue(new User(name, email))
                .retrieve()
                .bodyToMono(String.class);
    }
}

ব্যবহার:

userClient.createUser("John Doe", "johndoe@example.com")
    .subscribe(System.out::println);

৩. Error Handling

WebClient-এর রেসপন্সে ত্রুটি হ্যান্ডেল করার জন্য .onStatus() ব্যবহার করা হয়।

import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class UserClient {

    private final WebClient webClient;

    public UserClient(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://api.example.com").build();
    }

    public Mono<String> getUserDetailsWithErrorHandling() {
        return webClient.get()
                .uri("/users/1")
                .retrieve()
                .onStatus(
                    status -> status.is4xxClientError(),
                    response -> Mono.error(new RuntimeException("Client Error"))
                )
                .onStatus(
                    status -> status.is5xxServerError(),
                    response -> Mono.error(new RuntimeException("Server Error"))
                )
                .bodyToMono(String.class);
    }
}

৪. Custom Headers যোগ করা

public Mono<String> getUserDetailsWithHeaders() {
    return webClient.get()
            .uri("/users/1")
            .header("Authorization", "Bearer token_value")
            .retrieve()
            .bodyToMono(String.class);
}

৫. টাইমআউট কনফিগার করা

import java.time.Duration;

public Mono<String> getUserDetailsWithTimeout() {
    return webClient.get()
            .uri("/users/1")
            .retrieve()
            .bodyToMono(String.class)
            .timeout(Duration.ofSeconds(5));
}

WebClient এবং Reactive Streams

WebClient Mono এবং Flux ব্যবহার করে কাজ করে:

  1. Mono:
    • একক ডেটা রিটার্ন করতে ব্যবহৃত হয়।
    • উদাহরণ: Mono<String>
  2. Flux:
    • একাধিক ডেটা রিটার্ন করতে ব্যবহৃত হয়।
    • উদাহরণ: Flux<String>

WebClient vs RestTemplate

বৈশিষ্ট্যWebClientRestTemplate
ConcurrencyNon-blocking, AsynchronousBlocking, Synchronous
Performanceউচ্চতর (Reactive Streams)তুলনামূলক ধীর
Reactive SupportReactive Programming সমর্থিতসমর্থন করে না
Preferred ForHigh-performance, MicroservicesTraditional, Simple HTTP Calls

উপসংহার

WebClient Spring Boot অ্যাপ্লিকেশনে REST API কল করার জন্য একটি আধুনিক, শক্তিশালী এবং উচ্চ কার্যক্ষম টুল। এটি বিশেষ করে রিয়্যাক্টিভ প্রোগ্রামিং এবং মাইক্রোসার্ভিস আর্কিটেকচারের জন্য উপযোগী। Asynchronous এবং Non-blocking বৈশিষ্ট্যের কারণে এটি পারফরমেন্স বৃদ্ধির ক্ষেত্রে খুবই কার্যকর।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion